﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entity;
using Business;

namespace CPEBookWeb
{
    public class ResultatsView
    {
        // Classes CSS
        private const string cssResultats = "resultats";
        private const string cssResultatsAucun = "resultats-aucun";
        private const string cssResultatsLien = "resultat-lien";
        private const string cssResultatsTdLien = "resultat-tdlien";
        private const string cssResultatsTdInfos = "resultat-tdinfos";
        private const string cssResultatsTdBouton = "resultat-tdbouton";

        /// <summary>
        /// Utilisateur voulant afficher la table
        /// </summary>
        public Utilisateur Utilisateur { get; set; }

        /// <summary>
        /// Liste des utilisateurs
        /// </summary>
        public List<Utilisateur> Utilisateurs { get; set; }

        /// <summary>
        /// Liste des amitiées
        /// </summary>
        public List<AmitieUtilisateur> Amities { get; set; }

        /// <summary>
        /// Handler écoutant les clics sur les boutons d'action
        /// </summary>
        public EventHandler EcouteurAction { get; set; }

        /// <summary>
        /// Indique si l'on doit afficher les informations des utilisateurs
        /// </summary>
        public bool AfficherInfos { get; set; }


        /// <summary>
        /// Génère une table contenant la liste des utilisateurs
        /// </summary>
        /// <returns></returns>
        public Table getTableResultats()
        {
            Table table = new Table();
            table.CellSpacing = 0;
            table.CellPadding = 4;
            table.CssClass = cssResultats;

            // Code particulier s'il n'y a pas d'utilisateurs
            if (Utilisateurs == null || Utilisateurs.Count == 0)
            {
                LiteralControl texte = new LiteralControl("Aucun résultat.");

                TableCell td = new TableCell();
                td.Controls.Add(texte);
                td.CssClass = cssResultatsAucun;

                TableRow tr = new TableRow();
                tr.Cells.Add(td);

                table.Rows.Add(tr);
                return table;
            }

            // On génère la liste des utilisateurs
            foreach (Utilisateur utilisateur in Utilisateurs)
            {
                HyperLink lien = creerLienProfil(utilisateur);
                lien.CssClass = cssResultatsLien;

                // Par défaut, pas de boutons
                Button bouton = new Button();
                bouton.ID = "BtnAction_" + utilisateur.idutilisateur;
                bouton.CommandArgument = utilisateur.idutilisateur.ToString();
                if (EcouteurAction != null)
                    bouton.Click += EcouteurAction;

                // Les informations de l'utilisateur
                LiteralControl infos = new LiteralControl();
                infos.Text = " Sexe ";
                infos.Text += (utilisateur.sexe == Sexe.MASCULIN) ? "masculin" : "féminin";
                infos.Text += ", fillière " + utilisateur.filliere;
                infos.Text += " promotion " + utilisateur.promotion.ToString();
                infos.Text += " ";

                // On recherche une amitié entre les deux utilisateurs
                Amitie amitie = null;
                if (Utilisateur.idutilisateur == utilisateur.idutilisateur)
                {
                    // L'utilisateur est amis avec lui même
                    amitie = new Amitie { etat = AmitieEtat.AMIS };
                }
                else
                {
                    if (Amities != null)
                    {
                        foreach (AmitieUtilisateur a in Amities)
                        {
                            if (a.Utilisateur.idutilisateur == utilisateur.idutilisateur)
                                amitie = a.Amitie;
                        }
                    }
                }

                if (amitie == null)
                {
                    bouton.CommandName = "demander";
                    bouton.Text = "Demander " + utilisateur.prenom + " en amis";
                }
                else if (amitie.etat == AmitieEtat.DEMANDEUR)
                {
                    bouton.CommandName = "aucune";
                    bouton.Text = "Demande d'ajout déjà envoyée à " + utilisateur.prenom; ;
                    bouton.Enabled = false;
                }
                else if (amitie.etat == AmitieEtat.RECEVEUR)
                {
                    bouton.CommandName = "accepter";
                    bouton.Text = "Accepter la demande d'ajout de " + utilisateur.prenom;
                }
                else if (amitie.etat == AmitieEtat.AMIS)
                {
                    bouton.CommandName = "";
                    bouton.Text = "Vous êtes déjà amis avec " + utilisateur.prenom;
                    bouton.Enabled = false;
                }

                TableCell tdGauche = new TableCell();
                tdGauche.Controls.Add(lien);
                tdGauche.CssClass = cssResultatsTdLien;

                TableCell tdMilieu = null;
                if (AfficherInfos)
                {
                    tdMilieu = new TableCell();
                    tdMilieu.Controls.Add(infos);
                    tdMilieu.CssClass = cssResultatsTdInfos;
                }

                TableCell tdDroite = new TableCell();
                if (bouton.CommandName != "")
                    tdDroite.Controls.Add(bouton);
                tdDroite.CssClass = cssResultatsTdBouton;

                TableRow tr = new TableRow();
                tr.Cells.Add(tdGauche);
                if (tdMilieu != null)
                    tr.Cells.Add(tdMilieu);
                tr.Cells.Add(tdDroite);
                table.Rows.Add(tr);
            }

            return table;
        }


        // Retourne un lien vers le profil utilisateur
        private HyperLink creerLienProfil(Utilisateur utilisateur)
        {
            HyperLink lien = new HyperLink();
            lien.NavigateUrl = "Profil.aspx?id=" + utilisateur.idutilisateur.ToString();
            lien.Text = utilisateur.prenom + " " + utilisateur.nom;
            return lien;
        }
    }
}